home *** CD-ROM | disk | FTP | other *** search
- /* Program EX_0804.C
- Listing 16C - see documentation in TUTOR.SSS
- */
-
- #include <stdio.h>
-
- #include "SSSC.H"
-
- #define ARRIVL 1
- #define STARTA 2
- #define ENDACT 3
- #define NEXTAC 4
-
- #define TIMEL 150
-
- int n, server, ecode;
- FILE *f;
- char *outpr =
- "At %7.2f q size:%3d ave q:%4.1f std:%5.2f\n";
-
- void prime()
- {
- n = 0;
- server = 1;
- INIQUE(1,0,1);
- CREATE(0, n);
- SIMEND(TIMEL);
- f = fopen("sss.prn", "w");
- if (f == NULL)
- { puts("Cannot open SSS.PRN"); exit(1); }
- }
-
- main()
- {
- prime();
-
- do
- {
- if ((ecode = NEXTEV()) > 0)
- switch(ecode)
- {
-
- case ARRIVL :
- n = n + 1;
- CREATE(EX(1), n);
- SCHED(0, NEXTAC, IDE());
- break;
-
- case NEXTAC :
- if (server > 0) SCHED(0, STARTA, IDE());
- else
- {
- QUEUE(1, 0);
- fprintf(f, "%7.2f %3d %4.1f %5.2f\n",
- T(), NQ(1), QAVG(1), QSTD(1));
- printf(outpr, T(), NQ(1), QAVG(1),
- QSTD(1));
- }
- break;
-
- case STARTA :
- SCHED(EX(0.9), ENDACT, IDE());
- server = server - 1;
- break;
-
- case ENDACT :
- DISPOS();
- server = server + 1;
- if (NQ(1))
- {
- REMVFQ(1,1);
- SCHED(0, STARTA, IDE());
- fprintf(f, "%7.2f %3d %4.1f %5.2f\n",
- T(), NQ(1), QAVG(1), QSTD(1));
- printf(outpr, T(), NQ(1), QAVG(1),
- QSTD(1));
- }
- break;
-
- }
- } while(ecode);
- }